package com.adcc.loadsheet.monitor.service;

import com.adcc.loadsheet.monitor.entity.*;
import com.adcc.loadsheet.monitor.vo.AlarmLogVO;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * 系统日志服务层
 */
public interface ServerLogService {

    /**
     * 监控页面展示日志
     *
     * @param count 单位：小时
     * @return
     */
    List<ServerLog> showLog(int count) throws Exception;

    /**
     * 根据条件查询系统日志
     * @param serverName
     * @param type
     * @param content
     * @param startTime
     * @param endTime
     * @return
     */
    PageInfo<ServerLog> find(String serverName, String type, String content, String startTime, String endTime, int currentPage, int pageSize) throws Exception;


    // ------------------------------------------------构建数据库日志-------------------------------------------------------
    /**
     * 构建BGS监控日志
     *
     * @param moduleName 模块名称
     * @param curStatus 当前服务状态
     * @param lastStatus 上一次服务状态
     */
    void buildBGSLog(String moduleName, BGSMonitor curStatus, BGSMonitor lastStatus);
    /**
     * 构建Database监控日志
     *
     * @param moduleName 模块名称
     * @param curStatus 当前服务状态
     * @param lastStatus 上一次服务状态
     */
    void buildDatabaseLog(String moduleName, DatabaseMonitor curStatus, DatabaseMonitor lastStatus);

    /**
     * 构建MQ监控日志
     *
     * @param moduleName 模块名称
     * @param curStatus 当前服务状态
     * @param lastStatus 上一次服务状态
     */
    void buildMQLog(String moduleName, MQMonitor curStatus, MQMonitor lastStatus);

    /**
     * 构建AppUpload监控日志
     *
     * @param moduleName 模块名称
     * @param curStatus 当前服务状态
     * @param lastStatus 上一次服务状态
     */
    void buildAppUploadLog(String moduleName, AppUploadMonitor curStatus, AppUploadMonitor lastStatus);

    /**
     * 构建航信接口监控日志
     *
     * @param moduleName 模块名称
     * @param curStatus 当前服务状态
     * @param lastStatus 上一次服务状态
     */
    void buildAirInfoLog(String moduleName, AirInfoMonitor curStatus, AirInfoMonitor lastStatus);

    /**
     * 构建MsgUpCenter监控日志
     *
     * @param moduleName 模块名称
     * @param curStatus 当前服务状态
     * @param lastStatus 上一次服务状态
     */
    void buildMsgUpCenterLog(String moduleName, MsgUpCenterMonitor curStatus, MsgUpCenterMonitor lastStatus);

    /**
     * 构建website监控日志
     *
     * @param moduleName 模块名称
     * @param curStatus 当前服务状态
     * @param lastStatus 上一次服务状态
     */
    void buildWebsiteLog(String moduleName, WebsiteMonitor curStatus, WebsiteMonitor lastStatus);

    /**
     * 构建舱单抓取程序监控日志
     *
     * @param moduleName 模块名称
     * @param curStatus 当前服务状态
     * @param lastStatus 上一次服务状态
     */
    void buildForwarderLog(String moduleName, ForwarderMonitor curStatus, ForwarderMonitor lastStatus);

    // --------------------------------------------------告警日志-------------------------------------------------------
    /**
     * 构建BGS监控日志-告警日志
     * [2024-6-01：张丽娟：增加声音和弹窗告警的功能，系统支持对指定告警项进行声音和弹窗告警忽略的功能]
     * @param moduleName 模块名称
     * @param curStatus 当前服务状态
     * @param lastStatus 上一次服务状态
     */
    void buildBGSAlarmLog(String moduleName, BGSMonitor curStatus, BGSMonitor lastStatus);

    /**
     * 构建Database监控日志-告警日志
     * [2024-6-01：张丽娟：增加声音和弹窗告警的功能，系统支持对指定告警项进行声音和弹窗告警忽略的功能]
     * @param moduleName 模块名称
     * @param curStatus 当前服务状态
     * @param lastStatus 上一次服务状态
     */
    void buildDatabaseAlarmLog(String moduleName, DatabaseMonitor curStatus, DatabaseMonitor lastStatus);

    /**
     * 构建MQ监控日志-告警日志
     * [2024-6-01：张丽娟：增加声音和弹窗告警的功能，系统支持对指定告警项进行声音和弹窗告警忽略的功能]
     * @param moduleName 模块名称
     * @param curStatus 当前服务状态
     * @param lastStatus 上一次服务状态
     */
    void buildMQAlarmLog(String moduleName, MQMonitor curStatus, MQMonitor lastStatus);

    /**
     * 构建AppUpload监控日志-告警日志
     * [2024-6-01：张丽娟：增加声音和弹窗告警的功能，系统支持对指定告警项进行声音和弹窗告警忽略的功能]
     * @param moduleName 模块名称
     * @param curStatus 当前服务状态
     * @param lastStatus 上一次服务状态
     */
    void buildAppUploadAlarmLog(String moduleName, AppUploadMonitor curStatus, AppUploadMonitor lastStatus);

    /**
     * 构建航信接口监控日志-告警日志
     * [2024-6-01：张丽娟：增加声音和弹窗告警的功能，系统支持对指定告警项进行声音和弹窗告警忽略的功能]
     * @param moduleName 模块名称
     * @param curStatus 当前服务状态
     * @param lastStatus 上一次服务状态
     */
    void buildAirInfoAlarmLog(String moduleName, AirInfoMonitor curStatus, AirInfoMonitor lastStatus);

    /**
     * 构建MsgUpCenter监控日志-告警日志
     * [2024-6-01：张丽娟：增加声音和弹窗告警的功能，系统支持对指定告警项进行声音和弹窗告警忽略的功能]
     * @param moduleName 模块名称
     * @param curStatus 当前服务状态
     * @param lastStatus 上一次服务状态
     */
    void buildMsgUpCenterAlarmLog(String moduleName, MsgUpCenterMonitor curStatus, MsgUpCenterMonitor lastStatus);

    /**
     * 构建website监控日志-告警日志
     * [2024-6-01：张丽娟：增加声音和弹窗告警的功能，系统支持对指定告警项进行声音和弹窗告警忽略的功能]
     * @param moduleName 模块名称
     * @param curStatus 当前服务状态
     * @param lastStatus 上一次服务状态
     */
    void buildWebsiteAlarmLog(String moduleName, WebsiteMonitor curStatus, WebsiteMonitor lastStatus);

    /**
     * 构建舱单抓取程序监控日志-告警日志
     * [2024-6-01：张丽娟：增加声音和弹窗告警的功能，系统支持对指定告警项进行声音和弹窗告警忽略的功能]
     * @param moduleName 模块名称
     * @param curStatus 当前服务状态
     * @param lastStatus 上一次服务状态
     */
    void buildForwarderAlarmLog(String moduleName, ForwarderMonitor curStatus, ForwarderMonitor lastStatus);

    /**
     * 构建mysql监控告警日志
     * [2024-6-01：张丽娟：增加声音和弹窗告警的功能，系统支持对指定告警项进行声音和弹窗告警忽略的功能]
     * @param moduleName 模块名称
     * @param curStatus 当前服务状态
     * @param lastStatus 上一次服务状态
     */
    void buildMysqlAlarmLog(String moduleName, MysqlMonitor curStatus, MysqlMonitor lastStatus);

    /**
     * 获取告警弹框内容
     * @return
     */
    List<AlarmLogVO> getAlarmContents() throws Exception;

    /**
     * 告警确认
     * @param moduleName 模块名
     */
    void alarmConfirm(String moduleName);

    // --------------------------------------------------告警日志-------------------------------------------------------

}
